package cn.xopencode.oss.rpc.permission;

import cn.xopencode.common.framework.vo.CommonResult;
import cn.xopencode.oss.rpc.permission.dto.ResourceCreateDTO;
import cn.xopencode.oss.rpc.permission.dto.ResourceUpdateDTO;
import cn.xopencode.oss.rpc.permission.vo.ResourceTreeNodeVO;
import cn.xopencode.oss.rpc.permission.vo.ResourceVO;

import javax.validation.constraints.NotNull;
import java.util.Collection;
import java.util.List;

/**
* 资源 Rpc 接口
*/
public interface ResourceRpc {

    /**
    * 创建资源
    *
    * @param createDTO 创建资源 DTO
    * @return 资源
    */
    CommonResult<String> createResource(ResourceCreateDTO createDTO);

    /**
    * 更新资源
    *
    * @param updateDTO 更新资源 DTO
    */
    CommonResult<Boolean> updateResource(ResourceUpdateDTO updateDTO);

    /**
    * 删除资源
    *
    * @param resourceId 资源编号
    */
    CommonResult<Boolean> deleteResource(String resourceId);

    /**
    * 获得资源
    *
    * @param resourceId 资源编号
    * @return 资源
    */
    CommonResult<ResourceVO> getResource(String resourceId);

    /**
     * 获得资源全列表
     *
     * @return 资源列表
     */
    CommonResult<List<ResourceVO>> listResources();

    /**
    * 获得资源列表
    *
    * @param resourceIds 资源编号列表
    * @return 资源列表
    */
    CommonResult<List<ResourceVO>> listResources(List<String> resourceIds);

    /**
     * 获得指定职务的资源列表
     *
     * @param positionIds 职务编号列表
     * @param type 资源类型
     * @return 资源列表
     */
    CommonResult<List<ResourceVO>> listPositionResource(@NotNull(message = "职务编号列表不能为空") Collection<String> positionIds, Integer type);

    CommonResult<List<ResourceTreeNodeVO>> treeResource();
}
